home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / news / nntp / nntplink3.1.0 / entry.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-25  |  2.5 KB  |  152 lines

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include "conf.h"
  4. #include "readline.h"
  5. #include "nntplink.h"
  6.  
  7. extern int Input_from;
  8. #ifdef XREPLIC
  9. extern int Xreplic;
  10. #endif
  11.  
  12. Boolean
  13.   parse_entry(entry)
  14. char *entry;
  15. {
  16.     char *tentry, *tsysname;
  17.     char *beg_mesgid, *end_mesgid;
  18. #ifndef LOOKUP_ARTICLE
  19.     char *beg_filename, *end_filename;
  20. #endif
  21. #ifdef BNEWS
  22.     char *sentto = "sent to";
  23. #endif
  24.  
  25.     if (Batchfile.use || (Input_from & FLG_STDIN)) {
  26.  
  27.     Article.filename = entry;
  28.  
  29. #ifdef BNEWS
  30.     for (; *entry != '\0' && *entry != '\t'; entry++)
  31.       ;
  32. #else
  33.     for (; *entry != '\0' && *entry != ' '; entry++)
  34.       ;
  35. #endif
  36.  
  37.     if (*entry != '\0') {
  38.  
  39.         *entry++ = '\0';
  40.         Article.mesgid = entry;
  41.  
  42.  
  43. #ifdef XREPLIC
  44.         if (!Xreplic) {
  45. #endif
  46.  
  47.         for (; *entry != '\0' && *entry != ' ' && *entry != '\t';
  48.              entry++)
  49.           ;
  50.  
  51.         if (Article.mesgid[0] != '<' ||
  52.             *(entry-1) != '>')
  53.             return FALSE;
  54.  
  55.         if (*entry != '\0') {
  56.             *entry++ = '\0';
  57.             Article.count = atoi(entry);
  58.         }
  59. #ifdef XREPLIC
  60.         }
  61. #endif
  62.     }
  63.  
  64.     if (Article.filename[0] == '/' && Article.filename[1] == '\0')
  65.       Article.filename = NULL;
  66.  
  67.     } else {
  68.  
  69.     for (; *entry != '\0' && *entry != '<'; entry++)
  70.       ;
  71.  
  72.     if (*entry == '\0')
  73.       return FALSE;
  74.  
  75. #ifndef BNEWS
  76.     if (*(entry - 2) == '-')
  77.       return FALSE;
  78. #endif
  79.  
  80.     beg_mesgid = entry;
  81.  
  82.     for (; *entry != '\0' && *entry != '>'; entry++)
  83.       ;
  84.  
  85.     if (*entry == '\0')
  86.       return FALSE;
  87.  
  88.     if (*(end_mesgid = ++entry) == '\0')
  89.       return FALSE;
  90.  
  91. #ifndef LOOKUP_ARTICLE
  92.     if ((*(++entry) != '(') || (*(++entry) == '\0'))
  93.       return FALSE;
  94.  
  95.     beg_filename = entry;
  96.  
  97.     for (; *entry != '\0' && *entry != ')'; entry++)
  98.       ;
  99.  
  100.     if (*entry == '\0')
  101.       return FALSE;
  102.  
  103.     end_filename = entry;
  104.  
  105.     if (*++entry == '\0')
  106.       return FALSE;
  107.  
  108. #endif /* !LOOKUP_ARTICLE */
  109.  
  110. #ifdef BNEWS
  111.     if (*++entry == '\0')
  112.       return FALSE;
  113.  
  114.     for (; *sentto != '\0' && *sentto == *entry; entry++, sentto++)
  115.       ;
  116.  
  117.     if (*sentto != '\0')
  118.       return FALSE;
  119.  
  120. #endif /* BNEWS */
  121.  
  122.     while (*entry != '\0' && *++entry != '\0') {
  123.  
  124.         for (tentry = entry, tsysname = Host.sysname;
  125.          *tsysname != '\0' && *tentry == *tsysname;
  126.          tentry++, tsysname++)
  127.           ;
  128.  
  129. #ifdef BNEWS
  130.         if ((*tsysname == '\0') &&
  131.         ((*tentry == ',') || (*tentry == '\0'))) {
  132. #else
  133.         if ((*tsysname == '\0') &&
  134.         ((*tentry == ' ') || (*tentry == '\0'))) {
  135. #endif
  136. #ifndef LOOKUP_ARTICLE
  137.         Article.filename = beg_filename;
  138.         *end_filename = '\0';
  139. #endif
  140.         Article.mesgid = beg_mesgid;
  141.         *end_mesgid = '\0';
  142.         return TRUE;
  143.         }
  144.  
  145.         for (; *entry != '\0' && *entry != ' '; entry++)
  146.           ;
  147.     }
  148.     return FALSE;
  149.     }
  150.     return TRUE;
  151. }
  152.